class Instructor < ActiveRecord::Base

  scope_out :deleted, :conditions=>"deleted=1"
  scope_out :not_deleted, :conditions=>"deleted=0"

  # FIXME ver que hacer con las entrevistas cuando lo borro, no puede ser null
  
  has_many :alumnos, :class_name=>'Persona', :conditions=>['coeficiente_id=',Coeficiente::ALUMNO].join, :dependent=>:nullify
  has_many :exalumnos, :class_name=>'Persona', :conditions=>['coeficiente_id=',Coeficiente::EXALUMNO].join, :dependent=>:nullify
  has_many :horarios, :dependent=>:nullify
  has_many :entrevistas, :class_name=>'Visita', :dependent=>:nullify
  has_many :prospects, :class_name=>'Persona', :through=>:entrevistas, :source=>:persona
  has_many :matriculas
  has_many :users
  
  # las clases de prueba que organizo.
  has_many :pruebas

  validates_presence_of :nombre

  def nombre_corto
    return nombre.strip.split(' ',2)[0]
  end

  # calcula el % de evasion en el mes en curso del instructor
  def evasion_este_mes
    @evasion_este_mes ||= (bajas_este_mes.to_f/(nro_alumnos_actual+bajas_este_mes).to_f*100.0)
  end
  
  # calcula la cantidad de exalumnos en el mes en curso del instructor
  def bajas_este_mes
    @bajas_este_mes ||= Persona.count(:all,:joins=>'INNER JOIN evasions ON personas.id=evasions.persona_id',:conditions=>"MONTH(evasions.fecha)=MONTH(CURDATE()) AND YEAR(evasions.fecha)=YEAR(CURDATE()) AND personas.instructor_id=#{id}")
  end

  def nro_alumnos_actual
    @nro_alumnos_actual ||= alumnos.count
  end
  
  # nro de alumnos de preyoga.
  def nro_alumnos_preyoga
    alumnos.count(:conditions=>"grado_id=#{Grado::ASPIRANTE}")
  end
  
  # nro de alumnos de yoga
  def nro_alumnos_yoga
    alumnos.count(:conditions=>"grado_id>#{Grado::ASPIRANTE}")
  end
  
  def alumnos_sobre_total
    @alumnos_sobre_total ||= 100.0*nro_alumnos_actual.to_f/Persona.nro_alumnos.to_f
  end
  
  # devuelve el numero de matriculas del mes en curso
  def matriculas_este_mes
    @matriculas_este_mes ||= matriculas.count_este_mes
  end
  
  # devuelve la efectivdad haciendo matriculas del mes en curso
  def efectividad_matriculas
    @efectividad_matriculas ||= (matriculas_este_mes.to_f/visitas_perfil_este_mes.to_f)*100.0
  end
  
  # devuelve las visitas perfil que hubo en el mes en cursos
  def visitas_perfil_este_mes
    @visitas_perfil_este_mes ||= entrevistas.count_perfil_este_mes
  end
  
  def visitas_este_mes
    @visitas_este_mes ||= entrevistas.count_este_mes
  end
    
  def visitas_perfil_sobre_total  
    @visitas_perfil_sobre_total ||= visitas_perfil_este_mes.to_f/visitas_este_mes.to_f*100.0
  end    
  
end
